#===--- build-presets.ini - Option presets for building Swift --------------===#
#
## This source file is part of the Swift.org open source project
##
## Copyright (c) 2014 - 2016 Apple Inc. and the Swift project authors
## Licensed under Apache License v2.0 with Runtime Library Exception
##
## See http://swift.org/LICENSE.txt for license information
## See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
#
#===------------------------------------------------------------------------===#

#===------------------------------------------------------------------------===#
# Buildbots for Darwin OSes
#===------------------------------------------------------------------------===#
[preset: mixin_buildbot_install_components]
dash-dash

swift-install-components=compiler;clang-builtin-headers;stdlib;sdk-overlay;editor-integration;tools;testsuite-tools;sourcekit-xpc-service


[preset: mixin_buildbot_trunk_base]
# Build standard library and SDK overlay for iOS device and simulator.
ios
tvos
watchos
test
validation-test

dash-dash

verbose-build
build-ninja

swift-sdks=OSX;IOS;IOS_SIMULATOR;TVOS;TVOS_SIMULATOR;WATCHOS;WATCHOS_SIMULATOR

# Build static standard library because it is used
# to build external projects.
build-swift-static-stdlib
build-swift-stdlib-unittest-extra

compiler-vendor=apple

install-swift

# Path to the root of the installation filesystem.
install-destdir=%(install_destdir)s

# Path to the .tar.gz package we would create.
installable-package=%(installable_package)s

# If someone uses this for incremental builds, force reconfiguration.
reconfigure

[preset: buildbot,tools=RA,stdlib=RD,test=no]
mixin-preset=
    mixin_buildbot_trunk_base
    mixin_buildbot_install_components

# Build Release without debug info, because it is faster to build.
release
assertions

dash-dash

swift-stdlib-build-type=RelWithDebInfo
swift-stdlib-enable-assertions=false

# Disable osx tests.
skip-test-osx

# Disable non-x86.
skip-build-ios
skip-test-ios
skip-build-tvos
skip-test-tvos
skip-build-watchos
skip-test-watchos
swift-sdks=OSX
swift-primary-variant-sdk=OSX
swift-primary-variant-arch=x86_64

[preset: mixin_buildbot_tools_RA_stdlib_RDA]
mixin-preset=
    mixin_buildbot_trunk_base
    mixin_buildbot_install_components

# Build Release without debug info, because it is faster to build.
release
assertions
# Also run tests in optimized modes.
test-optimized

dash-dash

swift-stdlib-build-type=RelWithDebInfo
swift-stdlib-enable-assertions=true

# This is a release non-incremental build. Run sil-verify-all.
sil-verify-all


[preset: mixin_buildbot_tools_RA_stdlib_RD]
mixin-preset=
    mixin_buildbot_trunk_base
    mixin_buildbot_install_components

# Build Release without debug info, because it is faster to build.
release
assertions
# Also run tests in optimized modes.
test-optimized

dash-dash

swift-stdlib-build-type=RelWithDebInfo
swift-stdlib-enable-assertions=false
build-serialized-stdlib-unittest


[preset: mixin_buildbot_tools_RA_stdlib_DA]
mixin-preset=
    mixin_buildbot_trunk_base
    mixin_buildbot_install_components

# Build Release without debug info, because it is faster to build.
release
assertions

dash-dash

swift-stdlib-build-type=Debug
swift-stdlib-enable-assertions=true


[preset: buildbot,tools=RA,stdlib=DA]
mixin-preset=
    mixin_buildbot_tools_RA_stdlib_DA

dash-dash

# Don't run host tests for iOS, tvOS and watchOS platforms to make the build
# faster.
skip-test-ios-host
skip-test-tvos-host
skip-test-watchos-host

[preset: buildbot,tools=RA,stdlib=RD]
mixin-preset=
    mixin_buildbot_tools_RA_stdlib_RD

dash-dash

# Don't run host tests for iOS, tvOS and watchOS platforms to make the build
# faster.
skip-test-ios-host
skip-test-tvos-host
skip-test-watchos-host

[preset: buildbot,tools=RA,stdlib=RDA]
mixin-preset=
    mixin_buildbot_tools_RA_stdlib_RDA

dash-dash

# Don't run host tests for iOS, tvOS and watchOS platforms to make the build
# faster.
skip-test-ios-host
skip-test-tvos-host
skip-test-watchos-host

[preset: buildbot,tools=RA-flto,stdlib=RDA]
mixin-preset=
    mixin_buildbot_tools_RA_stdlib_RDA

dash-dash

# Don't run host tests for iOS, tvOS and watchOS platforms to make the build
# faster.
skip-test-ios-host
skip-test-tvos-host
skip-test-watchos-host
swift-enable-lto
llvm-enable-lto

#===------------------------------------------------------------------------===#
# Incremental buildbots for Darwin OSes
#===------------------------------------------------------------------------===#

[preset: buildbot_incremental_base]
test
validation-test

dash-dash

# On buildbots, always force a reconfiguration to make sure we pick up changes
# in the build-script and build-presets.ini.
reconfigure

verbose-build
build-ninja

build-swift-stdlib-unittest-extra

compiler-vendor=apple


[preset: buildbot_incremental_base_all_platforms]
mixin-preset=buildbot_incremental_base

# Build standard library and SDK overlay for iOS device and simulator.

ios
tvos

[preset: buildbot_incremental,tools=RA,stdlib=RA]
mixin-preset=buildbot_incremental_base_all_platforms

build-subdir=buildbot_incremental

# Build Release without debug info, because it is faster to build.
release
assertions

# Build llbuild & swiftpm here
llbuild
#swiftpm

dash-dash

# Only run OS X tests to make the build cycle faster.
# We still build the iOS standard library though -- it is free given the
# parallelism.
skip-test-ios
skip-test-tvos
skip-test-watchos


[preset: buildbot_incremental,tools=RA,stdlib=RA,OnlytvOS]
mixin-preset=buildbot_incremental_base_all_platforms

build-subdir=buildbot_incremental_OnlytvOS

# Build Release without debug info, because it is faster to build.
release
assertions

dash-dash

# This preset runs only tvOS tests.
skip-test-osx
skip-test-ios
skip-test-watchos

# This preset is used by CI to test swift-corelibs-xctest.
[preset: buildbot_incremental,tools=RA,stdlib=RA,XCTest]
# We don't use buildbot_incremental_base_all_platforms because we don't need to
# build for iOS/tvOS.
mixin-preset=buildbot_incremental_base

# Build and test XCTest. On Linux, the build script is aware of the dependency
# on Foundation, so that is built as well. On OS X, Foundation is built as part
# of the XCTest Xcode project.
xctest

dash-dash

# This preset is meant to test XCTest, not Swift or Foundation. We don't
# want stochastic failures in those test suites to prevent XCTest tests from
# being run.
skip-test-cmark
skip-test-swift
skip-test-foundation

# This preset may be used by swift-corelibs-xctest contributors when building
# locally. It takes less time than the CI preset, but is less reliable at
# clearing out cached build products.
[preset: corelibs-xctest]
release
assertions
xctest
test

dash-dash

skip-test-cmark
skip-test-swift
skip-test-foundation

[preset: buildbot_incremental_asan,tools=RDA,stdlib=RDA]
mixin-preset=buildbot_incremental_base_all_platforms

build-subdir=buildbot_incremental_asan

# Build Release with debug info, so that we can symbolicate backtraces.
release-debuginfo
assertions

dash-dash

# FIXME: Swift/ASan does not support iOS yet.
skip-build-ios
skip-test-ios

# FIXME: Swift/ASan does not support tvos yet.
skip-build-tvos
skip-test-tvos

# FIXME: Swift/ASan does not support watchos yet.
skip-build-watchos
skip-test-watchos

enable-asan

[preset: buildbot_incremental_asan_ubsan,tools=RDA,stdlib=RDA]
mixin-preset=buildbot_incremental_base_all_platforms

build-subdir=buildbot_incremental_asan_ubsan

# Build Release with debug info, so that we can symbolicate backtraces.
release-debuginfo
assertions

dash-dash

# FIXME: Swift/UBSan does not support mac os x yet.
skip-build-osx
skip-test-osx

# FIXME: Swift/ASan does not support iOS yet.
skip-build-ios
skip-test-ios

# FIXME: Swift/ASan does not support tvos yet.
skip-build-tvos
skip-test-tvos

# FIXME: Swift/ASan does not support watchos yet.
skip-build-watchos
skip-test-watchos

enable-asan
enable-ubsan

[preset: buildbot_incremental_asan,tools=DA,stdlib=RDA]
mixin-preset=buildbot_incremental_base_all_platforms

build-subdir=buildbot_incremental_asan_debug

# Build Release with debug info, so that we can symbolicate backtraces.
assertions

dash-dash

# FIXME: Swift/ASan does not support iOS yet.
skip-build-ios
skip-test-ios

# FIXME: Swift/ASan does not support tvos yet.
skip-build-tvos
skip-test-tvos

# FIXME: Swift/ASan does not support watchos yet.
skip-build-watchos
skip-test-watchos

enable-asan

swift-stdlib-build-type=RelWithDebInfo


[preset: buildbot_incremental_cross_compile_iphoneos,tools=RA,stdlib=RA]
mixin-preset=buildbot_incremental_base_all_platforms

build-subdir=buildbot_incremental_cross_compile_iphoneos

# Build Release without debug info, because it is faster to build.
release
assertions

dash-dash

cross-compile-tools-deployment-targets=iphoneos-arm64 iphoneos-armv7 iphoneos-armv7s


[preset: buildbot_incremental_cross_compile_iphonesimulator,tools=RA,stdlib=RA]
mixin-preset=buildbot_incremental_base_all_platforms

build-subdir=buildbot_incremental_cross_compile_iphonesimulator

# Build Release without debug info, because it is faster to build.
release
assertions

dash-dash

cross-compile-tools-deployment-targets=iphonesimulator-i386 iphonesimulator-x86_64

[preset: buildbot_incremental,tools=RA,stdlib=RD,smoketest=macosx]
mixin-preset=buildbot_incremental_base
build-subdir=buildbot_incremental

# We build release+asserts.
release
assertions

# We run the OS X tests and validation tests.
test
validation-test

dash-dash

# Always reconfigure cmake
reconfigure

# We want to always perform a verbose build
verbose-build

# Build ninja while we are at it
build-ninja

# We need to build the unittest extras so we can test
build-swift-stdlib-unittest-extra

# Set the vendor to apple
compiler-vendor=apple

# Make sure our stdlib is RA.
swift-stdlib-build-type=RelWithDebInfo
swift-stdlib-enable-assertions=true

# Disable non-x86 building/testing.
skip-build-ios
skip-test-ios
skip-build-tvos
skip-test-tvos
skip-build-watchos
skip-test-watchos
swift-sdks=OSX
swift-primary-variant-sdk=OSX
swift-primary-variant-arch=x86_64

# Don't build the benchmarks
skip-build-benchmarks

[preset: buildbot_incremental,tools=RA,stdlib=RD,smoketest=macosx,flto]
mixin-preset=buildbot_incremental,tools=RA,stdlib=RD,smoketest=macosx
build-subdir=buildbot_incremental

dash-dash

swift-enable-lto


#===------------------------------------------------------------------------===#
# A setting to run a buildbot that passes extra swift args when compiling
# modules that match regexp.
#
# This is currently used to run non-default pass orderings to stress the
# optimizer. See utils/pass-pipeline.
#===------------------------------------------------------------------------===#

[preset: buildbot_incremental_extra_swift_args,tools=RA,stdlib=RD]
build-subdir=buildbot_incremental_extra_swift_args
# Build standard library and SDK overlay for iOS device and simulator.
test
validation-test
extra-swift-args=%(extra_swift_args)s
release
assertions

dash-dash

# On buildbots, always force a reconfiguration to make sure we pick up changes
# in the build-script and build-presets.ini.
reconfigure

verbose-build
build-ninja

build-swift-stdlib-unittest-extra

skip-build-ios
skip-test-ios
skip-build-lldb

compiler-vendor=apple
sil-verify-all

#===------------------------------------------------------------------------===#
# Convenience aliases
#
# Do not use on buildbots!
#===------------------------------------------------------------------------===#

[preset: buildbot_incremental]
mixin-preset=buildbot_incremental,tools=RA,stdlib=RA

[preset: asan]
mixin-preset=buildbot_incremental_asan,tools=RDA,stdlib=RDA

#===------------------------------------------------------------------------===#
# Special Runtime Builders
#===------------------------------------------------------------------------===#

[preset: buildbot_incremental_leaks]
build-subdir=buildbot_incremental_leaks

dash-dash

# Disable ios. These builders are x86 only.
skip-ios
skip-tvos
skip-watchos
# Disable x86 testing. skip-ios disables testing of ios as well.
skip-test-osx

# Always reconfigure so we pick up changes in the build-script and
# build-presets.ini.
reconfigure
verbose-build
build-ninja
build-swift-stdlib-unittest-extra
compiler-vendor=apple
swift-runtime-enable-leak-checker

[preset: buildbot_incremental_leaks,tools=RA,stdlib=R]
mixin-preset=buildbot_incremental_leaks

# Build release+asserts
release
assertions

dash-dash

# We want our stdlib to not have assertions.
swift-stdlib-enable-assertions=false

[preset: buildbot_incremental_leaks,tools=RA,stdlib=RA]
mixin-preset=buildbot_incremental_leaks

# Build release+asserts
release
assertions

#===------------------------------------------------------------------------===#
# Package Builders
#===------------------------------------------------------------------------===#

# A mixin that enables 'lightweight' assertions that don't slow down the
# compiler significantly.
[preset: mixin_lightweight_assertions]
assertions
no-swift-stdlib-assertions

# FIXME: This should be:
# no-assertions
# swift-assertions
# ... but our tests are expecting assertions to be either on or off everywhere.

dash-dash

# AST verifier slows down the compiler significantly.
swift-enable-ast-verifier=0

#===------------------------------------------------------------------------===#
# Linux Builders
#===------------------------------------------------------------------------===#
[preset: mixin_linux_installation]
mixin-preset=mixin_lightweight_assertions

llbuild
swiftpm
xctest
dash-dash

install-swift
install-lldb
install-llbuild
install-swiftpm
install-xctest
install-prefix=/usr
swift-install-components=autolink-driver;compiler;clang-builtin-headers;stdlib;sdk-overlay;license
build-swift-static-stdlib
build-swift-stdlib-unittest-extra
skip-test-lldb

# Executes the lit tests for the installable package that is created
# Assumes the swift-integration-tests repo is checked out
test-installable-package

# Path to the root of the installation filesystem.
install-destdir=%(install_destdir)s

# Path to the .tar.gz package we would create.
installable-package=%(installable_package)s

[preset: buildbot_linux]
mixin-preset=mixin_linux_installation
build-subdir=buildbot_linux
lldb
release
test
validation-test
foundation

dash-dash

install-foundation
reconfigure

# Ubuntu 15.10 preset for backwards compat and future customizations.
[preset: buildbot_linux_1510]
mixin-preset=buildbot_linux

# Ubuntu 14.04 preset for backwards compat and future customizations.
[preset: buildbot_linux_1404]
mixin-preset=buildbot_linux

[preset: buildbot_linux_armv7]
release
llbuild
lldb
# Not all tests pass, currently
#test
foundation
swiftpm
xctest

build-subdir=buildbot_linux

dash-dash

install-swift
install-lldb
install-llbuild
install-foundation
install-swiftpm
install-xctest
install-prefix=/usr
swift-install-components=autolink-driver;compiler;clang-builtin-headers;stdlib;sdk-overlay;dev
build-swift-static-stdlib
skip-test-lldb

# Executes the lit tests for the installable package that is created
# Assumes the swift-package-tests repo is checked out
# FIXME: Disabled until a home for the swift-snapshot-tests can be found.
#test-installable-package

# Path to the root of the installation filesystem.
install-destdir=%(install_destdir)s

# Path to the .tar.gz package we would create.
installable-package=%(installable_package)s


#===------------------------------------------------------------------------===#
# OS X Package Builders
#===------------------------------------------------------------------------===#
[preset: mixin_osx_package_base]
ios
tvos
watchos

lldb
llbuild
swiftpm

# Build with debug info, this allows us to symbolicate crashes from
# production builds.
release-debuginfo

dash-dash

lldb-no-debugserver
lldb-build-type=Release
verbose-build
build-ninja
build-swift-static-stdlib
build-swift-stdlib-unittest-extra
compiler-vendor=apple
swift-sdks=OSX;IOS;IOS_SIMULATOR;TVOS;TVOS_SIMULATOR;WATCHOS;WATCHOS_SIMULATOR

install-swift
install-lldb
install-llbuild
install-swiftpm

install-destdir=%(install_destdir)s

darwin-install-extract-symbols

# Path where debug symbols will be installed.
install-symroot=%(install_symroot)s

# Path where the compiler, the runtime and the standard libraries will be
# installed.
install-prefix=%(install_toolchain_dir)s/usr

# Executes the lit tests for the installable package that is created
# Assumes the swift-integration-tests repo is checked out
test-installable-package

# If someone uses this for incremental builds, force reconfiguration.
reconfigure

[preset: mixin_osx_package_test]
build-subdir=buildbot_osx

ios
tvos
watchos
test
validation-test

dash-dash

skip-test-lldb

# Path to the .tar.gz package we would create.
installable-package=%(installable_package)s

[preset: buildbot_osx_package]
mixin-preset=
    mixin_osx_package_base
    mixin_osx_package_test
    mixin_lightweight_assertions

dash-dash

swift-install-components=compiler;clang-builtin-headers;stdlib;sdk-overlay;license;sourcekit-xpc-service
llvm-install-components=libclang;libclang-headers

# Path to the .tar.gz package we would create.
installable-package=%(installable_package)s

# Path to the .tar.gz symbols package
symbols-package=%(symbols_package)s

# Info.plist
darwin-toolchain-bundle-identifier=%(darwin_toolchain_bundle_identifier)s
darwin-toolchain-display-name=%(darwin_toolchain_display_name)s
darwin-toolchain-name=%(darwin_toolchain_xctoolchain_name)s
darwin-toolchain-version=%(darwin_toolchain_version)s
darwin-toolchain-alias=%(darwin_toolchain_alias)s

#===------------------------------------------------------------------------===#
# LLDB build configurations
#
# Use to build the compiler sources nested in LLDB.
#
# This is only used from Xcode, and expects the following configuration:
## an argument, swift_install_destdir=[path for Swift installed products]
## an environment variable, SWIFT_SOURCE_ROOT=[parent of swift/]
## an environment variable, SWIFT_BUILD_ROOT=[parent of Swift build directory]
#===------------------------------------------------------------------------===#

[preset: LLDB_Nested]
dash-dash
skip-build-benchmarks
install-destdir=%(swift_install_destdir)s

[preset: LLDB_Swift_DebugAssert]
mixin-preset=
    LLDB_Nested

assertions

[preset: LLDB_Swift_ReleaseAssert]
mixin-preset=
    LLDB_Nested

release-debuginfo
assertions

#===------------------------------------------------------------------------===#
# Test all platforms on OS X builder
#===------------------------------------------------------------------------===#

[preset: buildbot_all_platforms,tools=RA,stdlib=RA]
mixin-preset=buildbot_incremental_base_all_platforms

build-subdir=buildbot_incremental

# Build Release without debug info, because it is faster to build.
release
assertions

# Build llbuild & swiftpm here
llbuild
swiftpm

dash-dash

# Don't run host tests for iOS, tvOS and watchOS platforms to make the build
# faster.
skip-test-ios-host
skip-test-tvos-host
skip-test-watchos-host

#===------------------------------------------------------------------------===#
# Test watchOS on OS X builder
#===------------------------------------------------------------------------===#

[preset: buildbot_watch_platform,tools=RA,stdlib=RA]
mixin-preset=buildbot_incremental_base_all_platforms

build-subdir=buildbot_incremental

# Build Release without debug info, because it is faster to build.
release
assertions

# Build llbuild & swiftpm here
llbuild
swiftpm

dash-dash

# Only run watchOS tests
skip-test-ios
skip-test-tvos
skip-test-osx
